package mylab.starters.mybatis.template;

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import mylab.base.model.entity.Entity;
import mylab.starters.mybatis.injector.methods.InsertBatch;
import mylab.starters.mybatis.injector.methods.InsertIgnore;

import java.io.Serializable;
import java.util.List;


public interface SuperService<K extends Serializable, E extends Entity<K>> extends IService<E> {

    /**
     * 插入数据,并返回ID
     *
     * @param entity 数据
     * @return K
     */
    default K insert(E entity) {
        boolean result = SqlHelper.retBool(getBaseMapper().insert(entity));
        return result ? entity.getId() : null;
    }


    /**
     * 插入数据，如果中已经存在相同的记录，则忽略当前新数据
     * {@link InsertIgnore}
     *
     * @param entity 实体类
     * @return K
     */
    K insertIgnore(E entity);

    /**
     * 批量插入数据，如果中已经存在相同的记录，则忽略当前新数据
     * {@link InsertIgnore}
     *
     * @param entityList 实体类列表
     * @return 影响条数
     */
    int insertIgnoreBatch(List<E> entityList);

    /**
     * 批量插入数据，如果中已经存在相同的记录，则忽略当前新数据
     * {@link InsertBatch}
     *
     * @param entityList 实体类列表
     * @return 影响条数
     */
    int insertBatch(List<E> entityList);

    /**
     * 修改所有的字段，未设置的字段将置空
     *
     * @param entity
     * @return
     */
    boolean updateAllById(E entity);

}
